19 #include "simpletools.h" 23 screen_t* ssd1331_init(
char sdi,
char sclk,
char cs,
char rs,
char rst,
int _width,
int _height) {
25 screen_t* dev = (screen_t*) malloc(
sizeof(screen_t));
26 memset(dev, 0,
sizeof(screen_t));
28 dev->color_depth = 16;
38 dev->height = _height;
41 dev->text_color = WHITE;
42 dev->bg_color = WHITE;
44 dev->deviceDrawPixel = ssd1331_drawPixel;
45 dev->deviceDrawLine = ssd1331_drawLine;
46 dev->deviceDrawFastHLine = ssd1331_drawFastHLine;
47 dev->deviceDrawFastVLine = ssd1331_drawFastVLine;
48 dev->deviceFillRect = ssd1331_fillRect;
49 dev->deviceCopyRect = ssd1331_copy;
51 dev->deviceInterface = INTF_SPI_NO_BUFFER;
53 dev->deviceClearDisplay = ssd1331_clearDisplay;
54 dev->deviceResetDisplay = ssd1331_resetDisplay;
55 dev->deviceInvertDisplay = ssd1331_invertDisplay;
56 dev->deviceSleepWakeDisplay = ssd1331_sleepWakeDisplay;
57 dev->deviceScrollDisplay = ssd1331_scrollDisplay;
60 i2c *eeBus = i2c_newbus(28, 29, 0);
61 loadFonts(dev, eeBus);
64 set_direction(sclk, 1);
65 set_direction(sdi, 1);
74 ssd1331_resetDisplay(dev);
76 int mask_cs = (1 << cs);
77 int mask_sdi = (1 << sdi);
78 int mask_clk = (1 << sclk);
79 int mask_dc = (1 << rs);
81 ssd1331_writeLockSet(dev->dev_id);
84 ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, SSD1331_CMD_DISPLAYOFF, 0);
85 ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, SSD1331_CMD_SETREMAP, 0);
86 ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, 0x72, 0);
87 ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, SSD1331_CMD_STARTLINE, 0);
88 ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, 0x00, 0);
89 ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, SSD1331_CMD_DISPLAYOFFSET, 0);
90 ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, 0x00, 0);
91 ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, SSD1331_CMD_NORMALDISPLAY, 0);
92 ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, SSD1331_CMD_SETMULTIPLEX, 0);
93 ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, 0x3F, 0);
94 ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, SSD1331_CMD_SETMASTER, 0);
95 ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, 0x8E, 0);
96 ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, SSD1331_CMD_POWERMODE, 0);
97 ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, 0x0B, 0);
98 ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, SSD1331_CMD_PRECHARGE, 0);
99 ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, 0x31, 0);
100 ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, SSD1331_CMD_CLOCKDIV, 0);
101 ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, 0xF0, 0);
102 ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, SSD1331_CMD_PRECHARGEA, 0);
103 ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, 0x64, 0);
104 ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, SSD1331_CMD_PRECHARGEB, 0);
105 ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, 0x78, 0);
106 ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, SSD1331_CMD_PRECHARGEA, 0);
107 ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, 0x64, 0);
108 ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, SSD1331_CMD_PRECHARGELEVEL, 0);
109 ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, 0x3A, 0);
110 ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, SSD1331_CMD_VCOMH, 0);
111 ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, 0x3E, 0);
112 ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, SSD1331_CMD_MASTERCURRENT, 0);
113 ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, 0x06, 0);
114 ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, SSD1331_CMD_CONTRASTA, 0);
115 ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, 0x91, 0);
116 ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, SSD1331_CMD_CONTRASTB, 0);
117 ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, 0x50, 0);
118 ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, SSD1331_CMD_CONTRASTC, 0);
119 ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, 0x7D, 0);
120 ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, SSD1331_CMD_DISPLAYON, 0);
122 ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, SSD1331_CMD_CLEAR, 0);
123 ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, 0x00, 0);
124 ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, 0x00, 0);
125 ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, _width - 1, 0);
126 ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, _height - 1, 0);
128 ssd1331_writeLockClear(dev->dev_id);
136 void ssd1331_resetDisplay(screen_t* dev) {
138 if(dev->rst_pin >= 0 && dev->rst_pin < 32) {